import {
  createRouter,
  createWebHistory
} from 'vue-router'
import {
  useAuthStore
} from '@/store/index.js'
import {
  getCurrentUserPermissions
} from '@/api/permission'
import {
  ElMessage
} from 'element-plus'

// 初始路由（只包含固定页面）
const routes = [{
    path: '/login',
    name: 'login',
    component: () => import('@/components/LoginPage.vue'),
    meta: {
      title: '用户登录'
    }
  },
  {
    path: '/register',
    name: 'register',
    component: () => import('@/components/RegisterPage.vue'),
    meta: {
      title: '用户注册'
    }
  },
  {
    path: '/',
    name: 'layout', // 建议不要叫 home，避免混淆
    component: () => import('@/views/HomeLayout.vue'),
    meta: {
      title: '首页'
    },
    children: [{
        path: '/profile',
        name: 'profile', // 建议不要叫 home，避免混淆
        component: () => import('@/views//user/ProfileView.vue'),
        meta: {
          title: '个人中心'
        },
      },
      {
        path: '',
        name: 'home', // ✅ 给默认子路由加 name
        component: () => import('@/components/HomeComponent.vue'),
        meta: {
          title: '控制台'
        }
      }
      // 动态子路由将通过 addRoute 添加到这里
    ]
  },
]

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})

let isPermissionsLoaded = false;

// 全局路由守卫
router.beforeEach(async (to, from, next) => {
  console.log(`从 ${from.path} 到 ${to.path}`)
  document.title = to.meta ?.title ? `${to.meta.title} - 企业资源管理系统` : '企业资源管理系统'

  if (to.path === '/login') {
    next()
    return
  }

  const authStore = useAuthStore()

  // 如果权限未加载，尝试从接口恢复
  if (!isPermissionsLoaded) {
    isPermissionsLoaded = true
    try {
      const res = await getCurrentUserPermissions()

      const permissions = res.data ?.permissions || []

      // if (!permissions || permissions.length === 0) {
      //   ElMessage.error('无有效权限数据')
      //   throw new Error('无权限数据')
      // }


      authStore.setPermissions(permissions)
      if (permissions.length > 0) {
        addDynamicRoutes(permissions)
      }
      router.hasDynamicAddedRoutes = true
      // ✅ 成功后添加动态路由
      // addDynamicRoutes(permissions)

      next({
        ...to
      })
      return

    } catch (error) {
      console.error('获取权限失败:', error)
      ElMessage.error('权限加载失败，请重新登录')
      localStorage.removeItem('ERP_TOKEN')
      next('/login')
      return
    }
  } else {
    // 权限已存在（比如刚登录），只需确保路由已添加
    if (!router.hasDynamicAddedRoutes) {
      if (authStore.permissions.length > 0) {
        addDynamicRoutes(authStore.permissions)
      }
      router.hasDynamicAddedRoutes = true
    }
  }
  next()
})

// ✅ 修正：动态添加子路由到 /home（即 name: 'layout' 的路由）
function addDynamicRoutes(permissionList) {
  permissionList.forEach(item => {

    if (!item.path || !item.component) {
      return;
    }

    // 构造动态路由
    const route = {
      path: item.path,
      name: item.name, // 必须唯一
      component: () => import(`@/views/${item.component}`),
      meta: {
        title: item.title,
        icon: item.icon
      }
    }

    // 添加为 / 的子路由（因为 / 对应 name: 'layout'）
    // 注意：addRoute(parentName, route)
    try {
      router.addRoute('layout', route) // 'layout' 是父路由的 name
    } catch (err) {
      console.error('添加动态路由失败:', item, err)
    }
  })
}

router.afterEach(() => {
  window.scrollTo(0, 0)
})

export default router